Skip to content

Add discriminated union serialization tests - #1860

Open
jar-stripe wants to merge 2 commits into
masterfrom
jar/discriminated-unions
Open

Add discriminated union serialization tests#1860
jar-stripe wants to merge 2 commits into
masterfrom
jar/discriminated-unions

Conversation

@jar-stripe

@jar-stripe jar-stripe commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Why?

Validates that the discriminated union type shapes work correctly in stripe-python before codegen produces these patterns. Covers both request-side (TypedDict params with Literal discriminator) and response-side (StripeObject deserialization).

What?

  • Adds tests/test_discriminated_unions.py with 36 tests covering:
    • Standalone union: TypedDicts with Literal["value"] discriminator field (request side)
    • Inline union: discriminator at parent level (request side)
    • Response deserialization via StripeObject.construct_from for both patterns
    • Round-trip serialization/deserialization

See Also

Tests discriminated union type shapes for both request-side (TypedDict
params with Literal discriminator) and response-side (StripeObject
deserialization), covering standalone and inline variants.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude
@jar-stripe
jar-stripe marked this pull request as ready for review August 6, 2026 21:13
@jar-stripe
jar-stripe requested a review from a team as a code owner August 6, 2026 21:13
@jar-stripe
jar-stripe requested review from xavdid and a lite review from Copilot and removed request for a team August 6, 2026 21:13

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new test module intended to validate “discriminated union” payload shapes, covering both request-style dict params (TypedDict + Literal discriminator) and response-style StripeObject construct/to_dict round-trips.

Changes:

  • Introduces standalone and inline discriminator “union” examples via TypedDict variants.
  • Adds runtime tests for discriminator field presence/access on dict params and StripeObject instances.
  • Adds round-trip checks ensuring discriminator fields survive construct_from(...).to_dict().

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +289 to +291
params: RgbColorParams = {"model": "rgb", "r": 200, "g": 100, "b": 50}
# Simulating what the SDK does when encoding params for an API request.
serialized = dict(params)
Comment on lines +1 to +11
"""
Tests for discriminated union type shapes.

Covers both sides of the API boundary:
- Request side: TypedDict params with Literal discriminator fields
- Response side: StripeObject deserialization from JSON with a discriminator

Two structural patterns are tested:
- Standalone union: the discriminated union is its own type (e.g. ColorParams)
- Inline union: the discriminator lives at the parent object level (e.g. shape.type)
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants